Итак, вот как будет выглядеть наша первая программа.
Не обращайте внимания на излишние комментарии справа от каждого оператора. Это справочная подробная информация для желающих детально разобраться, что происходит в программе. Мы же просто хотим вывести на экран MS-DOS строку «Hello, world!» с помощью программы типа .com. Для вывода текста мы будем использовать функцию 9 прерывания 21h.
Сама программа будет выглядеть примерно так:
Суть достаточно проста.
а. Командой mov ah,9 мы загружаем в регистра ah число 9. На языке "Бейсик" это выглядело бы примерно так: LET A=9. Следует отметить в данном случае, что ah предназначен "для служебного пользования" – в частности, использования тех же функций. Также стоит отметить, что на самом деле ah – это старший байт регистра ax, состоящего на самом деле из двух частей – старшего байта (ah) и младшего (al). Аналогично работают и остальные служебные регистры (bx, cx, dx).
b. Командой mov dx,offset helloworld мы загружаем фразу "Hello, world!". Однако вся фраза, конечно, не поместится в регистр, поэтому мы используем приставку "offset" – смещение. Грубо говоря, это адрес, указывающий компилятору, где на самом деле находится эта фраза. Определим это в конце программы.
c. int 21h – данной командой осуществляем прерывание, то есть собственно вывод текста на экран.
Узнаем об этом поподробнее.
1. Открываем файл "HELP.EXE".
2. Нажимаем любую клавишу.
3. Заходим в раздел "Указатель функций DOS/BIOS".
4. Заходим в раздел "Прерывания DOS".
5. Заходим в раздел "INT 21H".
Последовательность 1-5 в дальнейшем будет обозначена нами так: HELP.EXE -> Указатель функций DOS/BIOS -> Прерывания DOS -> INT 21H
Как стало видно из текста, мы действительно должны загрузить в регистр ah номер желаемой функции (в нашем случае -"9"), и выполнить прерывание (int 21h). Всё просто. Однако, конечно, вышеприведённый текст – не вся программа. Она будет иметь определённые признаки оформления, которые мы будем использовать во всех примерах. Начинаться любая наша программа будет так:
А заканчиваться так:
В середине и будет располагаться наш текст, а чуть ниже него ещё два элемента:
– int 20h – завершающее программу прерывание, выход в DOS. Если его не указать, программа выполнит свою работу и "зависнет".
– helloworld db 'Hello, world!$' – собственно определение переменной helloworld.
Директива db (define byte) определяет область памяти, доступную побайтно. Фраза "Hello, world!" указана в одинарных кавычках, а за знаком "!" указан знак "$" – конец строки. Почему так, поясним чуть позже. Что ещё следует знать, что определяем переменные мы в самом конце, чтобы при ассемблировании их не приняли за команды ассемблера. Итак, полностью оформленный текст программы будет выглядеть чуть более обширно.
Совет: разберитесь со структурой файла помощи HELP.EXE!